VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
END
Attribute VB_Name = "CRunApp"
Attribute VB_Creatable = True
Attribute VB_Exposed = True
Option Explicit
  
  Private Type STARTUPINFO
     cb As Long
     lpReserved As String
     lpDesktop As String
     lpTitle As String
     dwX As Long
     dwY As Long
     dwXSize As Long
     dwYSize As Long
     dwXCountChars As Long
     dwYCountChars As Long
     dwFillAttribute As Long
     dwFlags As Long
     wShowWindow As Integer
     cbReserved2 As Integer
     lpReserved2 As Long
     hStdInput As Long
     hStdOutput As Long
     hStdError As Long
  End Type

  Private Type PROCESS_INFORMATION
     hProcess As Long
     hThread As Long
     dwProcessID As Long
     dwThreadID As Long
  End Type

  Private Declare Function CreateProcessA Lib "kernel32" (ByVal _
     lpApplicationName As Long, ByVal lpCommandLine As String, ByVal _
     lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
     ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
     ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
     lpStartupInfo As STARTUPINFO, lpProcessInformation As _
     PROCESS_INFORMATION) As Long
  
  Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal _
     hHandle As Long, ByVal dwMilliseconds As Long) As Long

  Private Declare Function CloseHandle Lib "kernel32" (ByVal _
     hObject As Long) As Long

  Private Const NORMAL_PRIORITY_CLASS = &H20&
  Private Const INFINITE = -1&
  
  Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal _
     dwAccess As Long, ByVal fInherit As Integer, ByVal hObject _
     As Long) As Long

  Private Declare Function TerminateProcess Lib "kernel32" (ByVal _
     hProcess As Long, ByVal uExitCode As Long) As Long

  Private Const SYNCHRONIZE = 1048576
  
  Private Const STARTF_USESHOWWINDOW = &H1
  Private Const HIDEWIN = 0
  Private Const NORMAL = 1
  Private Const MINIMIZE = 2
  
  Private ProcessID As Long    'returned by CreateProcess
  Private ThreadID As Long     'returned by CreateProcess


Public Function Run(cmdline$, windowstate%) As Long
       
    Dim proc As PROCESS_INFORMATION
    Dim start As STARTUPINFO
    Dim temp As Long
    
 'Else Set Info Structure
    start.cb = Len(start)
    start.dwFlags = STARTF_USESHOWWINDOW
    start.wShowWindow = windowstate%
 'Run the application
    temp& = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, _
            NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)
    While temp& = 0
        DoEvents
        MsgBox "Doing Events"
    Wend
    ProcessID& = proc.hProcess
    ThreadID& = proc.hThread
    Run = ProcessID&
        
End Function



Public Sub Terminate()
    
    Dim temp As Long
    temp& = TerminateProcess(ProcessID&, 0&)
    temp& = CloseHandle(ThreadID&)
    temp& = CloseHandle(ProcessID&)

End Sub

